package reflect;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/*
编写三个任意的Javabean类，Student类，Teacher类，Worker类。
属性均为：name,age
方法要求：
    Student里面写学习study和吃饭eat的方法（方法无参无返回）
    Teacher里面写上课teach和吃饭eat的方法（方法无参无返回）
    Worker里面写工作work和睡觉sleep的方法（方法无参无返回）
本地新建配置文件properties
    属性：className=Student类的全类名methodName=study

在测试类中读取properties文件中的两个属性值
利用反射创建对象学生类的对象，并调用方法
修改配置文件，不修改代码，运行老师类中的上课方法
修改配置文件，不修改代码，运行工人类中的工作方法
 */
public class Test2 {
    public static void main(String[] args) throws Exception {
        //加载配置文件
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("info.properties");
        //创建properties集合，加载数据
        Properties prop = new Properties();
        prop.load(is);
        is.close();
        //取出数据
        String className = prop.getProperty("className");
        String methodName = prop.getProperty("methodName");
        //反射类的字节码对象
        Class<?> aClass = Class.forName(className);
        Object o = aClass.getConstructor().newInstance();
        Method method = aClass.getMethod(methodName);
        method.invoke(o);


    }
}
